(for Internet Explorer)
(src)
Sub  LoadEnvVars( Path_ofSetCommandLog, Option_ )
ファイルを参照して、複数の環境変数を現在のプロセスに設定します。
【引数】
Path_ofSetCommandLog
環境変数の設定の一覧のファイルパス、または辞書
環境変数全体を、ファイルに記述された値に設定します。
  LoadEnvVars  "settings.txt", Empty
setting.txt
VAR1=value1
VAR2=3
VAR3=cmd
→ T_Var.vbs # T_LoadEnvVars
テスト
今まで設定されていた環境変数のうち、Path_ofSetCommandLog のファイルに記述されて
いない環境変数は、削除されます。 ただし、Option_ = F_Append にすると削除されません。
Option_
Empty または F_Append または辞書
setting.txt は、コマンドプロンプトの set (Enter) で出力される内容と同じフォーマットです。
VBScript では、下記のように記述します。
g_sh.Run  "cmd /C (set > ""C:\folder\settings.txt"")",, True
参考
環境変数全体を、辞書に入っている内容に設定します。
  Set dic = CreateObject( "Scripting.Dictionary" )
  dic.Item( "VAR1" ) = "value1"
  dic.Item( "VAR2" ) = "3"
  LoadEnvVars( dic, Empty )
関連
  Set envs = CreateObject( "Scripting.Dictionary" )
  LoadEnvVars  "settings.txt", envs
ファイルに入っている環境変数の設定を、辞書に格納する
サンプル
Option_ 引数に辞書オブジェクトを渡すと、その辞書オブジェクトの内容が変わるだけで、
環境変数の値は変わりません。
サンプル
サンプル
(src)
Sub  SaveEnvVars( Path_ofSetCommandLog, Option_ )
現在の環境変数をファイルに保存するか、辞書に格納します。
【引数】
Path_ofSetCommandLog
ファイルパス、または辞書、または Empty
Option_
Empty 固定
Path_ofSetCommandLog に、値が入っていない(Empty の)変数を指定したら、
内部で Dictionary オブジェクトを生成して、その中に環境変数の設定値を
格納します。
サンプル:
  Dim  envs
  SaveEnvVars  envs, Empty  '//[out] envs
  echo  envs
  LoadEnvVars  envs, Empty
→ T_Var.vbs # T_LoadEnvVars
テスト
関連
Sub  ClearEnvVars()
現在のプロセスの環境変数をほぼすべて削除します。
(src)
→ T_Var.vbs # T_LoadEnvVars
テスト
VBScript から削除できない環境変数は残ります。
関連
Function  OpenForEnvVarsFile( EnvVarsFilePath as string ) as EditEnvVarsFile
(src)
環境変数ファイルを編集します。
Dim  f : Set f = OpenForEnvVarsFile( "settings.txt" )
echo  f.get_( "VAR_A" )
f.set_ "VAR_A", "1"
f.select_  "VAR_A", "1", Array( "VAR_A", "VAR_B", "VAR_C" ), "0"
f = Empty  '// Write
【引数】
EnvVarsFilePath
返り値
環境変数ファイルのパス
サンプル:
ランダムアクセスに対応しています。 OpenForRead や OpenForWrite のように
シーケンシャル(ファイルの先頭から順番)にアクセスする必要はありませんし、
変更しないキーまで Write する必要はありません。

存在しない環境変数を新規に set_ したときは、ABC 順でファイルに記述されます。
Empty の値を set_ すると、その環境変数はファイルから削除されます。
settings.txt
VAR_A
1
1
VAR_A
→ T_VarFile.vbs # [T_VarFile1]
テスト
VAR_A
.Path
Property  .Path as string
.get_
Function  .get_( Name as string ) as string
Name が定義されていないときは、Empty を返します
Sub  .set_( Name as string, Value as string or Empty )
.set_
Sub  select_( Name as string, Value as string,
              OtherNames as array of string, OtherValue as string )
.select_
関連
Sub  SetVarInBatchFile( Path as string, Symbol as string, Value as variant )
バッチ・ファイルの中で、環境変数を設定している部分の値を変更します。
【引数】
Path
Symbol
バッチ・ファイルのパス
環境変数の名前
Value
環境変数の値
テスト
→ T_VarFile.vbs
T_SetVarInBatchFile
ソース
→ vbslib.vbs
エディター等の設定を変更する
Sub  Start_VBS_Lib_Settings()
を起動します。
→ vbslib.vbs
ソース
→ SettingTemplate.xml
新規にエラーを発生させます。
未知のエラーを発生させます。
Finally ブロックに似た記述をする
関連
テスト
→ T_Err2 フォルダ
警告を表示してプロセスを終了します。
    Dim  e  ' as Err2
    If TryStart(e) Then  On Error Resume Next
        ...
    If TryEnd Then  On Error GoTo 0
    If e.num = E_FileNotExist  Then ... : e.Clear
    If e.num <> 0 Then  e.Raise
関連
    Dim  e  ' as Err2
    If TryStart(e) Then  On Error Resume Next
    If Trying Then  ...
    If Trying Then  ...
    If TryEnd Then  On Error GoTo 0
    If e.num = E_FileNotExist  Then ... : e.Clear
    If e.num <> 0 Then  e.Raise
Try ブロックの中が、1行だけのとき
Try ブロックの中が、複数行のとき
Trying は、毎行記述する必要があります。
エラーが発生しても、TryStart〜TryEnd の間で続きを実行する場合は、
Trying は不要です。
TryStart を使うと、エラーが発生した場所で、ブレークさせることができます。
E_FileNotExist
E_FileNotExist
ブレークさせるときは、Err2::BreakErrID を設定してください。
On Error Resume Next を呼び出したらブレークしなくなるので、TryStart が、
On Error Resume Next を呼び出すべきかどうかを判定します。
サンプル
→ _err2_test.lzh
Try ブロックの中で発生したエラーでブレークさせるとき
    If g_count_up(1)=0 Then  Stop '// watch-> g_count [TODO]
    echo "g_count(1)=" & g_count(1)
    If g_count(1) < 99 Then
        If TryStart(e) Then  On Error Resume Next
    End If
参考
関連
エラーをキューにためる
クリアしたエラーが発生した場所を調べるときは、クリアする代わりに
Err2::Raise してください。
  Public  Number       ' Err.Number
  Public  num          ' Err.Number
  Public  Description  ' Err.Description (Error Message)
  Public  desc         ' Err.Description (Error Message)
  Public  Source       ' Err.Source
  Public  ErrID        ' count of (num <> 0) in each first Copy after Clear
  Public  RaiseID      ' count of (num <> 0) in Copy
  Public  BreakErrID   ' as integer
  Public  BreakRaiseID ' as integer
(src)
Dim  g_Err2 as Err2
メンバ関数
err オブジェクトの内容をコピーします。
同じ内容のエラーを再度発生させる。
エラーの内容を変えて、再度エラーを発生させる。
エラーをクリアする。
TryStart を呼び出すと、Err2 オブジェクトを取得できます。
また、g_Err2 グローバル変数からアクセスすることもできます。
メンバ変数
関連
テスト
→ T_Err2 フォルダ
他にもあります。
Property Get  Err2::Number() as integer
エラーコード。
Property Get  Err2::num() as integer
エラー状態でなければ、0 になります。
Property Get  Err2::Description() as string
エラー・メッセージ。
Property Get  Err2::desc() as string
エラーメッセージを表示して、エラー状態から復帰し、 続きを実行する
サンプル
    Dim  e  ' as Err2
    If TryStart(e) Then  On Error Resume Next

        ...

    If TryEnd Then  On Error GoTo 0
    If e.num <> 0 Then
        echo_v  "Error 0x"+ Hex( e.num ) +": "+ e.Description
        e.Clear
    End If
復帰する前にエラーが発生した場所でブレークするには、Clear の前に Raise
を追加してください。
        echo_v  "Error 0x"+ Hex( e.num ) +": "+ e.Description
e.Raise
        e.Clear
Property Get  Err2::ErrStr() as string
XML形式のエラーメッセージ。
エラーメッセージの例:
<ERROR err_number='500' err_description='この変数は宣言されていません。'/>
関連
Function  Err2::GetErrStr() as string
標準形式のエラーメッセージを返す。
(src)
エラーメッセージの例:
<ERROR err_number='500' err_description='この変数は宣言されていません。'/>
関連
廃止されました
Property Get  Err2::DebugHint() as string
エラーの内容とデバッグのヒント。
サンプル:
  If TryStart(e) Then  On Error Resume Next
    ...
  If TryEnd Then  On Error GoTo 0
  If e.num <> 0 Then  echo  e.DebugHint : e.Clear
エラーメッセージの例:
下記のファイルをテキストエディタで開いて次のように変数の値を修正すると、
デバッガに接続して問題がある場所で停止します。
"T_Err2_Clear.vbs"
------------------------------------------------------------------
g_debug = 2
------------------------------------------------------------------
<ERROR err_number='500' err_description='この変数は宣言されていません。'/>
テスト
→ T_InputCommand.vbs # T_InputCommand_ForgetClear
Function  Err2::Value() as string
エラーの内容を文字列型で返します。
(src)
廃止されました
Sub  Err2::Copy( err as Err )
err オブジェクトの内容をコピーします。
(src)
Sub  Err2::Raise()
同じ内容のエラーを再度発生させる。
(src)
Sub  Err2::OverRaise( e_num as integer, e_desc as string )
エラーの内容を変えて、再度エラーを発生させる。
(src)
サンプル
    Dim  e  ' as Err2
    If TryStart(e) Then  On Error Resume Next
        ...
    If TryEnd Then  On Error GoTo 0
    If e.num <> 0 Then
        If Right( e.Description, 2 ) = "/>" Then
            message = Left( e.Description,  Len( e.Description ) - 2 ) + _
                " msg2=""追加メッセージ。""/>"
            e.OverRaise  e.Number,  message
        Else
            e.Raise
        End If
    End If
エラーが発生して、そのエラーメッセージが XML 形式なら、属性
msg2="追加メッセージ。" を追加します。
関連
Sub  Err2::Clear()
エラーをクリアする。
エラー処理が終わったことを示すため、メンバ変数をリセットします。
num = 0 : Description = "" : RaiseID = 0
(src)
関連
エラーメッセージを取得する
エラーの情報コピーしてクリアする
Sub  Err2::CopyAndClear( out_e2 as Err2 )
エラーの情報を out_e2 にコピーしてから Err2 のエラーをクリアします。
参考
内部で Err2 オブジェクトが生成されて、out_e2 に格納されます。
テスト
→ T_Err2_Main.vbs # T_Err2_CopyAndClear
(src)
CopyAndClear した後でエラーが発生した場合、テストによるエラーであると判断して、
次のようなメッセージが表示されます。
'//エラーが発生した場所を知るには、CopyAndClear する前に Raise してください。
次のように Raise するコードを追加してください。
    '//=== Error Handling Test
    echo  vbCRLF+"Next is Error Test"
    If TryStart(e) Then  On Error Resume Next
        Test                               '// ここでエラーが発生する
    If TryEnd Then  On Error GoTo 0
e.Raise                                    '// これを追加する
    e.CopyAndClear  e2  '//[out] e2
    Assert  e2.num <> 0                    '// テストによるエラーが発生した場所
e.Raise
また、
を設定していたら、設定を無効にしてください。
Sub  Err2::EnqueueAndClear()
エラーの情報を Err2 の内部キューに入れてから Err2 のエラーをクリアします。
テスト
→ T_Err2_Main.vbs # T_Err2_EnqueueAndClear
サンプル
  Dim  e  ' as Err2

  If TryStart(e) Then  On Error Resume Next
    Err.Raise  1,, "Error1"
  If TryEnd Then  On Error GoTo 0
  e.EnqueueAndClear

  If not IsEmpty(e) Then  s = e.DequeueAll() : If s <> "" Then  Raise  1, s
EnqueueAndClear
(src)
Function  Err2::DequeueAll() as string
Err2 の内部キューの内容を返し、内部キューを空にします。
テスト
→ T_Err2_Main.vbs # T_Err2_EnqueueAndClear
エラーがキューに入っていないときは、"" を返します。
参考
(src)
<ERROR msg="Error1"/>
<ERROR msg="Error2"/>
XML 書式のエラーメッセージを取得したいときは、ルート要素(タグ)を追加する
必要があるか検討してください。
サンプル返り値
Dim  Err2::ErrID  as integer
エラーの通し番号。
エラーが発生して初めての TryEnd を通ったとき +1 されます。
Err2::Clear した後で、次のエラーが発生すると +1 されます。
関連
Dim  Err2::RaiseID  as integer
エラーの通し番号。
エラーが発生して TryEnd を通るたびに +1 されます。
Err2::Clear で 0 に戻ります。
Dim  Err2::BreakErrID  as integer
デバッガでブレークするエラーの通し番号。
エラーメッセージの前に g_debug を設定するように表示されます。 このメッセージに従って、
デバッガを起動すると、エラーが発生した場所でブレークします。
下記のファイルをテキストエディタで開いて次のように変数の値を修正すると、
デバッガに接続して問題がある場所で停止します。
"T_Err2_Clear.vbs"
------------------------------------------------------------------
g_debug = 2
------------------------------------------------------------------
<ERROR err_number='500' err_description='この変数は宣言されていません。'/>
Visual Studio 2008 以降では、エラーが発生した場所からステップ実行することができます。
  '--- start of parameters for vbslib include -------------------
  g_debug = 1.5
エラーが発生したら Err2::ErrID が+1されますが、Err2::ErrID = Err2::BreakErrID に
なったら、エラーによってデバッガでブレークします。 次に Err2:ErrID が+1されるのは、
Err2::Clear した後にエラーが発生したときです。 それまでの Err.Raise では、Err2:ErrID
ではなく、Err2:RaiseID が+1されます。
ただし、TryStart 〜 TryEnd の間ではないとき(On Error Next Resume を実行していない
とき)にエラーが発生したときは、Err2::BreakErrID の値にかかわらず、エラーが発生したら
必ずエラーブレークします。
サンプル:
参考
関連
g_Err2.BreakErrID を 1.5 とすると、Err2::ErrID が 1 のときのエラーをキャッチする
TryEnd または Trying でブレークします。
通常、
vbslib.vbs をインクルードしたら、g_Err2::BreakErrID に設定されます。
は、エラーではありませんが、内部で Err.Raise を呼び出しているため、
Err2:ErrID が+1されます。
に設定してください。
g_debug が小さすぎると、後で復帰するために問題の無いエラーでブレークします。
また、ブレークしたときはエラー復帰が行われなくなります。
とりあえずデバッガに接続したいときは、十分に大きい値を設定するか、0 に設定して
エラーメッセージから必要な値を確認してください。